package netty.tomcat.servlet;

import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.http.HttpRequest;
import io.netty.handler.codec.http.QueryStringDecoder;
import io.netty.util.CharsetUtil;

import java.net.URLDecoder;
import java.util.List;
import java.util.Map;

/**
 * @author: 程序员七哥
 * @date: 2021-12-13
 * @description: 自定义请求类
 */
public class CustomHttpRequest {

    private HttpRequest httpRequest;

    private ChannelHandlerContext channelHandlerContext;

    public CustomHttpRequest(HttpRequest httpRequest, ChannelHandlerContext channelHandlerContext) {
        this.httpRequest = httpRequest;
        this.channelHandlerContext = channelHandlerContext;
    }

    /**
     * 获取请求的URI，其中是包含请求路径与请求参数的
     * @return
     */
    public String getUri() {
        // 需要使用 URLDecoder 进行解码，否则中文会乱码
        return URLDecoder.decode(httpRequest.uri(),CharsetUtil.UTF_8);
    }

    /**
     * 获取请求方式（POST、GET等）
     */
    public String getMethod() {
        return httpRequest.method().name();
    }

    // 获取所有请求参数列表
    public Map<String, List<String>> getParameters() {
        QueryStringDecoder decoder = new QueryStringDecoder(httpRequest.uri());
        return decoder.parameters();
    }

    // 获取到请求路径
    public String getPath() {
        return new QueryStringDecoder(httpRequest.uri()).path();
    }

    // 获取指定名称的参数
    public List<String> getParameters(String name) {
        return this.getParameters().get(name);
    }

    public String getParameter(String name) {
        List<String> list = this.getParameters(name);
        if(list == null) {
            return null;
        }
        return list.get(0);
    }
}
